package com.dh.leetcode.three;

import org.junit.Assert;
import org.junit.Test;

/**
 * @ClassName: _387_first_unique_character_in_a_string
 * @Description: 387. 字符串中的第一个唯一字符
 * 给定一个字符串，找到它的第一个不重复的字符，并返回它的索引。如果不存在，则返回 -1。
 * <p>
 * 示例：
 * <p>
 * s = "leetcode"
 * 返回 0
 * <p>
 * s = "loveleetcode"
 * 返回 2
 * <p>
 * <p>
 * 提示：你可以假定该字符串只包含小写字母。
 *
 * https://leetcode-cn.com/problems/first-unique-character-in-a-string/
 * @Author: shouzimu
 * @Date: 2020/12/23 8:56
 */
public class _387_first_unique_character_in_a_string {

    /**
     * 日常上桶
     * @param s
     * @return
     */
    public int firstUniqChar(String s) {
        if (null == s) {
            return -1;
        }
        char[] sArray = s.toCharArray();
        int[] bucket = new int[26];
        for (char c : sArray) {
            bucket[c - 'a']++;
        }
        for (int i = 0; i < sArray.length; i++) {
            if (bucket[sArray[i] - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }


    @Test
    public void firstUniqCharTest() {
        Assert.assertEquals(2, firstUniqChar("loveleetcode"));
        Assert.assertEquals(0, firstUniqChar("leetcode"));
    }
}
